/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Negocio;

import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Marcel
 */
public class Veiculo {
    private String placa;
    private String modelo;
    private Date dataAquisicao;
    private ArrayList<Manutencao> manutencoes = new ArrayList();

    /**
     * @return the placa
     */
    public String getPlaca() {
        return placa;
    }

    /**
     * @param placa the placa to set
     */
    public void setPlaca(String placa) {
        if (placa == null ||
            placa.length()< 7)
            throw new IllegalArgumentException("Placa do veículo inválida");
        this.placa = placa;
    }

    /**
     * @return the modelo
     */
    public String getModelo() {
        return modelo;
    }

    /**
     * @param modelo the modelo to set
     */
    public void setModelo(String modelo) {
        if (modelo == null ||
            modelo.isEmpty())
            throw new IllegalArgumentException("Modelo do veículo inválido");
        this.modelo = modelo;
    }

    /**
     * @return the dataAquisicao
     */
    public Date getDataAquisicao() {
        return dataAquisicao;
    }

    /**
     * @param dataAquisicao the dataAquisicao to set
     */
    public void setDataAquisicao(Date dataAquisicao) {
        if (dataAquisicao == null)
            throw new IllegalArgumentException("Placa do veículo inválida");
        this.dataAquisicao = dataAquisicao;
    }

    public void addManutencao(Manutencao umaManut){
        if (umaManut == null)
            throw new IllegalArgumentException("Manutenção do veículo inválida");
        manutencoes.add(umaManut);
    }

    public float getIndiceSucateamento(){
        int totalDiasParados = this.getTotalDiasParados();

        if (totalDiasParados < 21)
            return 0;
        if (totalDiasParados < 51)
            return 0.5f;
        if (totalDiasParados < 81)
            return 1;
        if (totalDiasParados < 121)
            return 1.5f;
        return 2;
}

    private int getTotalDiasParados() {
        int total = 0;
        for (Manutencao m: manutencoes){
            total += m.getTempoParado();
        }
        return total;
    }

    public float getCustoMedioManutencoes() {
        try {
            return (this.getCustoTotalManutencoes()/manutencoes.size());
        } catch (ArithmeticException ae){  // caso ocorra divisão por zero (não há manutenções)
            return 0;
        }
    }

    private float getCustoTotalManutencoes() {
        float total = 0;
        for (Manutencao m: manutencoes){
            total += m.getCusto();
        }
        return total;
    }

    public int getQtdServico(String descricao){
        int total = 0;
        for (Manutencao m: manutencoes){
            if (m.getDescricao().equalsIgnoreCase(descricao))
                total++;
        }
        return total;
    }

    public int compareTo(Veiculo outro){
        if (this.getIndiceSucateamento() < outro.getIndiceSucateamento())
            return -1;
        if (this.getIndiceSucateamento() == outro.getIndiceSucateamento())
            return 0;
        return 1;
    }

    public String toString() {
        return this.placa + " - "+ this.modelo;
    }
}
